"""
商品管理类
"""
import time

import pymysql
from pymysql import Connection

class ProductManagerSystem:

    def __init__(self):
        self.conn = None
        self.connect() # 连接数据库
        self.init_category() # 初始化类别信息

    def connect(self):
        """
        功能：用于创建数据库连接对象
        :return: 返回数据库连接对象
        """
        self.conn = Connection(
            host='localhost',
            port=3306,
            user='root',
            password='root',
            database='db06',
            autocommit=True,
        )
        return self.conn

    def close(self):
        if self.conn:
            try:
                self.conn.close()
            except Exception as e:
                raise e

    def __enter__(self):
        self.connect()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()
        return False


    # 初始化类别数据
    def init_category(self):
        category = ['电子产品','食品饮料','服装鞋帽','家具用品','图书文具']
        with self.conn.cursor() as cursor:
          try:
              # 检查数据库中是否存在数据，如果不存在则添加
              sql = 'select count(*) from category'
              cursor.execute(sql)
              result = cursor.fetchall()
              if result[0][0] == 0:  # 证明数据库中没有数据
                  # 把category中的数据添加到数据库
                  for cate in category:
                      sql2 = 'insert into category (category_name) values (%s)'
                      cursor.execute(sql2, (cate,))
                  print('商品类别初始化成功')
          except Exception as e:
            print('商品类别数据初始化失败',e)

    # 编写菜单功能
    def show_menu(self):
        while True:
            print("=======商品管理系统=======")
            print("1.展示所有商品")
            print("2.添加商品")
            print("0.退出当前系统")

            choice = input("请输入您的选择：")
            if choice == '1':
                pass
            elif choice == '2':
                self.add_product()
            elif choice == '0':
                print('欢迎下次使用，再见')
                break
            else:
                print('无效的选项，请重新输入')


    # 添加商品
    def add_product(self):
        with self.conn.cursor() as cursor:
            # 第一步先展示所有的商品类别供用户选择
            cursor.execute('select * from category') # 查询所有的类别
            categorys = cursor.fetchall()
            if not categorys: # 表示数据库为空
                print('没有可供选择的商品类别，请先添加类别')
                return
            print("=========可用的商品类别============")
            for category in categorys:
                print(f"{category[0]}.{category[1]}")
            # 用户输入数据(字符串)，
            category_id = int(input('请选择商品类别：'))
            category_name = input('请输入商品名称:')
            barcode = input('请输入商品条形码：')
            producion_date = input('请输入生产日期(格式:YYYY-MM-DD)')
            price = float(input('请输入商品单价:'))
            stock = int(input('请输入商品库存'))
            # 把字符串转换成对应的格式 日期
            try:
                production_date = time.strptime(producion_date, '%Y-%m-%d')
            except Exception as e:
                print('日期格式输入有误，请检查格式',e)
                return
            # 把数据添加到数据库
            sql = 'insert into product (category_id,product_name,barcode,production_date,price,stock) values (%s,%s,%s,%s,%s,%s)'
            cursor.execute(sql, (category_id, category_name, barcode, producion_date, price, stock))
            print('商品添加成功')



if __name__ == '__main__':
    with ProductManagerSystem() as pm:
        pm.show_menu()